package com.stargate.soft.scenario;

import java.sql.SQLException;

import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Affectation;
import com.stargate.bd.bean.Badge;
import com.stargate.bd.dao.factory.AffectationDAO;
import com.stargate.bd.dao.factory.BadgeDAO;
import com.stargate.exception.PlusieursBadgesActifsException;
import com.stargate.exception.TriggerErrorCode;

public class AjouterBadgePersonne {

	private Badge badge;
	private Affectation affectation;
	
	public AjouterBadgePersonne(int idPersonne, Badge badge, Affectation affectation)
			throws SQLException, PlusieursBadgesActifsException {
		// transaction Serializable
		ConnectionBD.setSerializable();
		
		// insertion du badge en BD
		BadgeDAO badgeDAO = new BadgeDAO();
		badgeDAO.insert(badge);
		// récupère le numéro du badge
		badge.setNumBadge(badgeDAO.getSeqNumBadge());

		// dates d'affectation par défaut
		if (affectation == null) {
			affectation = new Affectation(idPersonne, badge.getNumBadge());
		}

		// insertion de l'affectation en BD
		try {
			AffectationDAO affectationDAO = new AffectationDAO();
			affectationDAO.insert(affectation);
		} catch (SQLException e) {
			if (e.getErrorCode() == TriggerErrorCode.TRIGGER_1) {
				throw new PlusieursBadgesActifsException(e.getMessage());
			} else {
				throw e;
			}
		}
		
		// commit
		ConnectionBD.commit();
		
		this.affectation = affectation;
		this.badge = badge;
	}
	
	public Affectation getAffectation() {
		return affectation;
	}
	
	public Badge getBadge() {
		return badge;
	}

}
